home *** CD-ROM | disk | FTP | other *** search
Wrap
/* $VER: FinalWrapper 3.0 (29.01.95) by NDY's */ version="3.0" date="29.01.95" OPTIONS RESULTS SIGNAL ON ERROR SIGNAL ON SYNTAX SIGNAL ON BREAK_C ARG cliarg initerr=init() rxport=ADDRESS() IF ~(Left(rxport,Length(finalw))=finalw) THEN DO DO i=1 TO 20 UNTIL portok rxport=finalw||i portok=Show("p",rxport) END IF portok THEN ADDRESS VALUE rxport END portok=Show("p",rxport) CALL locale CALL checkenv CALL loaddef(1) pubonly=~check.mscr IF portok & ~pubonly & fwkey~="" THEN DO SIGNAL OFF ERROR ADDRESS COMMAND ''fwkey'' SIGNAL ON ERROR IF RC=0 THEN pubonly=1 ELSE customscr=D2C(RC,4) END ELSE pubonly=1 IF portok THEN DO GetDocItemPrefs "DECIMAL" deci=Upper(RESULT) DocItemPrefs "DECIMAL PERIOD" CALL options CALL chosenobjs CALL oval CALL scan CALL resetprefs END meas=measure.4 IF portok THEN DO GetDisplayPrefs "MEASURE" RESULT=Upper(RESULT) SELECT WHEN RESULT="INCHES" THEN meas=measure.1 WHEN RESULT="METRIC" THEN meas=measure.2 WHEN RESULT="PICA" THEN meas=measure.3 OTHERWISE NOP END END DO id=agads+1 TO agads+sgads ltxt.id=replacepat(ltxt.id,"%m",meas) END IF guiinit()=5 THEN CALL message(50,nogui) init=0 DO FOREVER CALL OnMenu(win,1024) IF ~zoomed THEN CALL ZipWindow(win) CALL ScreenToFront(scr) CALL ActivateWindow(win) CALL SetWindowTitles(win,wintitle,scrtitle) IF Left(text,Min(len.tgad,Length(text)))~=val.tgad THEN text=val.tgad DO UNTIL portok closed=0 DO UNTIL closed~=0 DO UNTIL closed~=0 CALL WaitPkt(portname) CALL messy END DO id=1 TO agads+sgads IF labs.id>0 THEN CALL checkstrgad END IF closed=winclose | closed=okclose & prefsstore THEN CALL savedef(1) IF closed=cancelclose | closed=winclose THEN DO CALL bye(0) closed=0 END IF closed=rxclose THEN DO ADDRESS COMMAND "Run >NIL: Rx "||defdir closed=0 END IF closed=nextclose THEN DO ADDRESS VALUE rxport portok=1 CALL newdoc closed=0 END END closed=0 portok=Show("P",rxport) IF ~portok THEN DO DO i=1 TO 20 UNTIL portok rxport=finalw||i portok=Show("p",rxport) END CALL newdoc END IF ~portok THEN CALL message(0,nofw) ELSE ADDRESS VALUE rxport END zoomed=BitTst(D2C(GETVALUE(win,24,4,"N")),28) IF ~zoomed THEN CALL ZipWindow(win) CALL SetWindowTitles(win,aborttitle,busytitle) ScreenToFront CALL OffMenu(win,1024) GetDocItemPrefs "DECIMAL" deci=Upper(RESULT) DocItemPrefs "DECIMAL PERIOD" CALL options IF chosenobjs()=0 THEN DO CALL oval CALL scan IF closed=0 THEN CALL text IF closed=0 THEN CALL wrap IF closed=0 THEN CALL group CALL updategadgets IF stilltoreply THEN DO CALL Reply(replymsg,0) stilltoreply=0 END END CALL resetprefs END CALL bye(5) init: init=1 errtext="%t (#%n)|in line %l" lockcnt=0 errtrap=0 getscrn=0 objs=0 sobjs=0 deci="" et="" cleangui=0 stilltoreply=0 replymsg="00000000"x apig=1 lib.apig=0 reqtools=4 lib.reqtools=0 win="00000000"x defprfs="" defspecs="" defcolour="" deffont="" portname="FinalWrapperPort" IF Show("P",portname) THEN DO ADDRESS VALUE portname IF cliarg~="" THEN INTERPRET cliarg ELSE PopFront CALL bye(0) END fwkey="ENVARC:FinalWrapper/FWKeyfile" libs=5 DO i=1 TO libs lib.i=0 END library.apig="apig.library" library.2="rexxmathlib.library" library.3="rexxsupport.library" library.reqtools="rexxreqtools.library" guidelib=5 library.guidelib="amigaguide.library" DO libn=1 TO libs lib.libn=Show("l",library.libn) IF ~lib.libn THEN lib.libn=AddLib(library.libn,0,-30,0) IF ~lib.libn & libn~=guidelib & libn~=reqtools THEN RETURN 14 END help=lib.guidelib defdir="" temp="" preff.1="" preff.2="" IF xexists("ENV:FinalWrapper") THEN DO preff.1="ENV:FinalWrapper/FinalWrapper.def" temp="ENV:FinalWrapper/FinalWrapper.temp" IF Open(prefs,"ENV:FinalWrapper/FWPath","R") THEN DO defdir=ReadLn(prefs) CALL Close(prefs) END END IF xexists("ENVARC:FinalWrapper") THEN preff.2="ENVARC:FinalWrapper/FinalWrapper.def" finalw="FINALW." libn=libs port=0 oldlen=0 oldtxt=0 oldoval=0 oldobjs=0 oldpara=-1 oldppos=-1 oldplen=-1 txt=0 oval=0 rx=0 ry=0 ovalx="" ovaly="" ovalw="" ovalh="" ovalp="" text="" mchks=0 macts=0 agads=0 sgads=0 tgads=0 wgads=0 slines=0 ovalscanned=0 gadgettext=0 virtualtext=1 alen=0 txtrot=0 windowpos=0 prefsstore=1 trapped=0 specs.0="" font.0="" colour.0="" dirtysize=1 sheetused=0 dirtytext=1 RETURN 0 locale: return=13 ; esc=27 ; bs=8 ; del=127 IF xexists("ENV:") THEN ok=Open(prefs,"ENV:Language","R") ELSE ok=0 IF ok THEN DO language=ReadLn(prefs) CALL Close(prefs) END ELSE language="english" IF language="deutsch" THEN DO measure.1="Zoll" measure.2="cm" measure.3="Pica" measure.4="?" docname="FinalWrapperSmallD.Guide" origwintitle="%i - %f" origscrtitle="%i - %f" unnamed="Unbenannt" defwinx=0 defwiny=0 aborttitle="<- Abbrechen" busytitle="%i - Am Arbeiten, bitte warten..." gnode.0="REQUESTER" mnode.0="MENU" stdbut="OK" errtext="FinalWrapper-Fehler:|%t|in Zeile %l:|<%s>|(Fehlernummer %n)" nolib="FinalWrapper-Fehler:|Konnte '%y' nicht öffnen!" nofw="Erst mal Final Writer starten!" noselect="FinalWrapper-Fehler:|Zuerst einen Textblock oder einen|Textausschnitt und ein Objekt|wählen oder die Werte in die|entsprechenden Felder eingeben!" wrongos="FinalWrapper-Fehler:|Es wird mindestens OS2.0 benötigt!" nogui="FinalWrapper-Fehler:|Konnte Requester nicht öffnen!" notnum="%g|Numerischer Wert erforderlich!" noreqtools="Konnte rexxreqtools.library nicht öffnen!" nohelp="Online Help nicht verfügbar!" rxcmderr="Unbekannter Arexx-Befehl|oder Syntaxfehler:|%c" rxfilerq="Arexx-Makro starten:" rxfileok="OK" about="FinalWrapper %v (%d)||Vorschläge & Fehler sind zu richten an:| Andreas Weiss| Dorfstrasse 24| CH-8212 Nohl| (Schweiz)||Dieses Programm ist SHAREWARE!|Die Gebühr beträgt sfr/DM 20 oder $15" arc=newgadget(2,"n",1,360,0,"ARC",0,9999) ltxt.arc.1="Nutze Sektor °: Uhrzeiger" ltxt.arc.2="Nutze Sektor °: Gegenuhrz." beg=newgadget(3,"p",0,0,0,"BEGIN",0,359) ltxt.beg.1="Position °: Absolut" ltxt.beg.2="Position °: Uhrzeigersinn" ltxt.beg.3="Position °: Gegenuhrzeiger" rot=newgadget(6,"r",0,0,0,"ROTATE",0,359) ltxt.rot.1="Rotation °: Absolut" ltxt.rot.2="Rotation °: Wie Textblock" ltxt.rot.3="Rotation °: Uhrzeigersinn" ltxt.rot.4="Rotation °: Gegenuhrzeiger" ltxt.rot.5="Rotation °: Delta Uhrz." ltxt.rot.6="Rotation °: Delta Gegenuhr" dlt=newgadget(-4,"l",0,0,0,"DELETE") ltxt.dlt.1="Löschen: Nichts" ltxt.dlt.2="Löschen: Nur Oval" ltxt.dlt.3="Löschen: Oval und Textblock" ltxt.dlt.4="Löschen: Oval kopieren" grp=newgadget(-3,"g",0,0,0,"GROUP") ltxt.grp.1="Gruppieren: Nein" ltxt.grp.2="Gruppieren: Ausgewähltes Oval" ltxt.grp.3="Gruppieren: Unsichtbares Oval" wrd=newgadget(0,"w",0,0,0,"WORDMODE") ltxt.wrd="Worte zusammensetzen" spl=newgadget(2,"s",0,25,0,"SPIRAL",1,100) ltxt.spl.1="Spirale %: Aussen -> innen" ltxt.spl.2="Spirale %: Innen -> aussen" siz=newgadget(2,"z",0,100,0,"SIZE",1,100) ltxt.siz.1="Zeichengröße %: Sinkend" ltxt.siz.2="Zeichengröße %: Steigend" zoo=newgadget(3,"v",0,50,0,"ZOOM",1,1000) ltxt.zoo.1="Vergrössern %: Alles" ltxt.zoo.2="Vergrössern %: Höhe" ltxt.zoo.3="Vergrössern %: Breite" ink=newgadget(-5,"f",0,0,0,"COLOUR") ltxt.ink.1="Farbe: Wie Text" ltxt.ink.2="Farbe: Wie Ovalfüllung" ltxt.ink.3="Farbe: Wie Ovalrahmen" ltxt.ink.4="Farbe: Schatten Füllfarbe" ltxt.ink.5="Farbe: Schatten Rahmenfarbe" adj=newgadget(-5,"k",0,0,0,"ADJUST") ltxt.adj.1="Korrigiere: Nichts" ltxt.adj.2="Korrigiere: Zeichengrösse" ltxt.adj.3="Korrigiere: Zeichenbreite" ltxt.adj.4="Korrigiere: Scheinbare Breite" ltxt.adj.5="Korrigiere: Sektorgrösse" adjarc=5 pat=newgadget(0,"ü",0,0,0,"PATTERN") ltxt.pat="Übernehme Attribute von Auswahl" xgad=newstr(7,"x",1,"",1,"XPOS") ltxt.xgad="(%m) X:" ygad=newstr(7,"y",1,"",1,"YPOS") ltxt.ygad="Y:" wgad=newstr(7,"b",1,"",1,"WIDTH") ltxt.wgad="Breite:" hgad=newstr(7,"h",1,"",1,"HEIGHT") ltxt.hgad="Höhe:" pgad=newstr(4,"#",1,1,0,"PAGE") ltxt.pgad="# der Seite:" tgad=newstr(200,"t",2,"",2,"TEXT") ltxt.tgad="Text:" okgad=newbutton(" OK ","o",RETURN,"OK") cancelgad=newbutton("Abbruch","a",esc,"CANCEL") closegad=newkey(del,"CLOSE") zipgad=newkey(" ","ZIP") depthgad=newkey(bs,"BACK") mtitle="Einstellungen" mgad=newchkitem("Gadgets aktivieren","G",1,"ACTIVATE") mspl=newchkitem("Korrigiere Sektor für Spiralen","K",1,"IMPROVE") mwin=newchkitem("Requester unter Mauszeiger","R",1,"WINDOW") mscr=newchkitem("Benutze Final Writers Screen","B",1,"SCREEN") mrel=newchkitem("Final Writer Version 3","F",1,"RELEASE") CALL newitem("","",mnode.0) mload=newitem("Laden","L","LOAD") msave=newitem("Sichern","S","SAVE") mres=newitem("Zurücksetzen","Z","RESET") mdef=newitem("Voreinstellungen","V","DEFAULTS") CALL newitem("","",mnode.0) mtext=newitem("Textblock-Einstellungen","T","TEXTPREFS") moval=newitem("Oval-Einstellungen","O","OVALPREFS") CALL newitem("","",mnode.0) mnext=newitem("Nächstes Dokument","N","NEXT") mrexx=newitem("Arexx-Makro starten...","A","MACRO") mhelp=newitem("Hilfe...","H","HELP") mabt=newitem("Über...","?","ABOUT") fwerrtext.5="Befehl schlug fehl" fwerrtext.10="Befehl gescheitert" fwerrtext.20="Ungültige Argumente" fwerrtext.100="Befehl unbekannt" fwerrtext.200="Kann fwarexx.library nicht öffnen" END ELSE DO measure.1="Inch" measure.2="cm" measure.3="Pica" measure.4="?" docname="FinalWrapperSmall.Guide" origwintitle="%i - %f" origscrtitle="%i - %f" unnamed="Unnamed" defwinx=0 defwiny=0 aborttitle="<- Abort" busytitle="%i - Busy working, please wait..." gnode.0="REQUESTER" mnode.0="MENU" stdbut="OK" errtext="FinalWrapper failed:|%t|in line %l:|<%s>|(errornumber %n)" noselect="FinalWrapper failed:|First select an object and|a text block or some text|or enter the values in the|appropriate gadgets!" nolib="FinalWrapper failed:|Couldn't open '%y'" nofw="Run Final Writer first!" wrongos="FinalWrapper failed:|At least OS2.0 is required!" nogui="FinalWrapper failed:|Couldn't open requester!" notnum="%g|Value must be numeric!" noreqtools="Couldn't open rexxreqtools.library!" nohelp="On-line help not available!" rxcmderr="Unknown Arexx command|or syntax error:|%c" rxfilerq="Execute Arexx macro:" rxfileok="OK" about="FinalWrapper %v (%d)||For suggestions & bugs write to:| Andreas Weiss| Dorfstrasse 24| CH-8212 Nohl| (Switzerland)||This program is SHAREWARE!|The share is sfr/DM 20 or $15" arc=newgadget(2,"u",1,360,0,"ARC",0,9999) ltxt.arc.1="Use arc °: Clockwise" ltxt.arc.2="Use arc °: Anticlockwise" beg=newgadget(3,"b",0,0,0,"BEGIN",0,359) ltxt.beg.1="Begin °: Absolute" ltxt.beg.2="Begin °: Clockwise" ltxt.beg.3="Begin °: Anticlockwise" rot=newgadget(6,"r",0,0,0,"ROTATE",0,359) ltxt.rot.1="Rotate °: Absolute" ltxt.rot.2="Rotate °: Like text block" ltxt.rot.3="Rotate °: Clockwise" ltxt.rot.4="Rotate °: Anticlockwise" ltxt.rot.5="Rotate °: Delta clockwise" ltxt.rot.6="Rotate °: Delta anticlock" dlt=newgadget(-4,"d",0,0,0,"DELETE") ltxt.dlt.1="Delete: Nothing" ltxt.dlt.2="Delete: Oval only" ltxt.dlt.3="Delete: Oval and text block" ltxt.dlt.4="Delete: Copy oval" grp=newgadget(-3,"g",0,0,0,"GROUP") ltxt.grp.1="Group: No" ltxt.grp.2="Group: Selected oval" ltxt.grp.3="Group: Invisible oval" wrd=newgadget(0,"j",0,0,0,"WORDMODE") ltxt.wrd="Join words" spl=newgadget(2,"s",0,25,0,"SPIRAL",1,100) ltxt.spl.1="Spiral %: Outside > inside" ltxt.spl.2="Spiral %: Inside > outside" siz=newgadget(2,"f",0,100,0,"SIZE",1,100) ltxt.siz.1="Font size %: Decreasing" ltxt.siz.2="Font size %: Increasing" zoo=newgadget(3,"z",0,50,0,"ZOOM",1,1000) ltxt.zoo.1="Zoom %: All" ltxt.zoo.2="Zoom %: Height" ltxt.zoo.3="Zoom %: Width" ink=newgadget(-5,"i",0,0,0,"COLOUR") ltxt.ink.1="Ink: From text" ltxt.ink.2="Ink: From oval fill" ltxt.ink.3="Ink: From oval border" ltxt.ink.4="Ink: Shadow = oval fill" ltxt.ink.5="Ink: Shadow = oval border" adj=newgadget(-5,"a",0,0,0,"ADJUST") ltxt.adj.1="Adjust: Nothing" ltxt.adj.2="Adjust: Character size" ltxt.adj.3="Adjust: Character width" ltxt.adj.4="Adjust: Apparent width" ltxt.adj.5="Adjust: Arc" adjarc=5 pat=newgadget(0,"p",0,0,0,"PATTERN") ltxt.pat="Pattern from selected text" xgad=newstr(7,"x",1,"",1,"XPOS") ltxt.xgad="(%m) X:" ygad=newstr(7,"y",1,"",1,"YPOS") ltxt.ygad="Y:" wgad=newstr(7,"w",1,"",1,"WIDTH") ltxt.wgad="Width:" hgad=newstr(7,"h",1,"",1,"HEIGHT") ltxt.hgad="Height:" pgad=newstr(4,"#",1,1,0,"PAGE") ltxt.pgad="# of page:" tgad=newstr(200,"t",2,"",2,"TEXT") ltxt.tgad="Text:" okgad=newbutton(" OK ","o",RETURN,"OK") cancelgad=newbutton("Cancel","c",esc,"CANCEL") closegad=newkey(del,"CLOSE") zipgad=newkey(" ","ZIP") depthgad=newkey(bs,"BACK") mtitle="Settings" mgad=newchkitem("Gadgets are auto-activated","G",1,"ACTIVATE") mspl=newchkitem("Adjust arc for spirals","A",1,"IMPROVE") mwin=newchkitem("Window beneath pointer","W",1,"WINDOW") mscr=newchkitem("Use Final Writer's screen","U",1,"SCREEN") mrel=newchkitem("Final Writer Release 3","F",1,"RELEASE") CALL newitem("","",mnode.0) mload=newitem("Load","L","LOAD") msave=newitem("Save","S","SAVE") mres=newitem("Reset","R","RESET") mdef=newitem("Defaults","D","DEFAULTS") CALL newitem("","",mnode.0) mtext=newitem("Text block preferences","T","TEXTPREFS") moval=newitem("Oval preferences","O","OVALPREFS") CALL newitem("","",mnode.0) mnext=newitem("Next Document","N","NEXT") mrexx=newitem("Execute Arexx macro...","E","MACRO") mhelp=newitem("Help...","H","HELP") mabt=newitem("About...","?","ABOUT") fwerrtext.5="Instruction didn't succeed" fwerrtext.10="Instruction failed" fwerrtext.20="Invalid arguments" fwerrtext.100="Unknown instruction" fwerrtext.200="Couldn't open fwarexx.library" END RETURN checkenv: about=replacepat(replacepat(about,"%v",version),"%d",date) info=replacepat(replacepat("FinalWrapper %v by NDY's","%v",version),"%d",date) origwintitle=replacepat(origwintitle,"%i",info) origscrtitle=replacepat(origscrtitle,"%i",info) wtitle=origwintitle stitle=origscrtitle busytitle=replacepat(busytitle,"%i",info) doc="" CALL newdoc menus=mchks+macts gads=agads+tgads+sgads kgads=gads+wgads menuoff=kgads i=32+menuoff mnode.i=mnode.0 prefsize=agads*4+mchks+4 prefsid="FW30"||D2C(prefsize,2) tempsize=0 IF temp~="" THEN DO id=agads+1 TO agads+sgads tempsize=tempsize+len.id END cancelclose=cancelgad-agads okclose=okgad-agads winclose=tgads+1 rxclose=winclose+1 nextclose=rxclose+1 DO id=1 TO kgads IF ~Datatype(lkey.id,"W") THEN lkey.id=C2D(Upper(lkey.id)) END IF initerr=14 THEN DO ln=replacepat(nolib,"%y",library.libn) CALL message(14,ln) CALL bye(14) END execbase=GETVALUE("4"x,0,4,"P") osversion=GETVALUE(execbase,20,2,"N") IF osversion<37 THEN CALL message(10,wrongos) IF ~xexists(fwkey) THEN fwkey="" IF help THEN DO docfile="HELP:"||language||"/"||docname IF ~xexists(docfile) THEN DO docfile="ENVARC:FinalWrapper/"||docname IF ~xexists(docfile) THEN help=0 END END RETURN guiinit: IF cleangui THEN RETURN 0 pubscr=Null() ; scr=Null() ; win=Null() ; gad=Null() ; scrvinfo=Null() ; menu=Null() ; port=0 cleangui=1 CALL SET_APIG_GLOBALS() GT_TAGBASE=X2D("80080000") GTMN_NEWLOOKMENUS=X2C("80080043") GTCB_SCALED=X2C("80080044") WA_NEWLOOKMENUS=X2C("80000093") nullbyte=D2C(0) port=OpenPort(portname) IF ~port THEN RETURN 5 pubscr=LockPubScreen("") IF pubscr=Null() THEN RETURN 5 IF pubonly THEN scr=pubscr ELSE scr=customscr scrvinfo=GetVisualInfo(scr) IF scrvinfo=Null() THEN RETURN 5 scrfont=GETVALUE(scr,40,4,"P") fonth=GETVALUE(scrfont,4,2,"N") scrrp=D2C(C2D(scr)+84) glistptr=MAKEPOINTER(0,0,4,MEMF_CLEAR) IF glistptr=Null() THEN RETURN 5 borderl=GETVALUE(scr,36,1,"N") borderr=GETVALUE(scr,37,1,"N") bordert=GETVALUE(scr,35,1,"N")+fonth+1 pubname="" pubnptr=MAKEPOINTER(0,0,MAXPUBSCREENNAME,MEMF_CLEAR) IF pubnptr~=Null() THEN DO checkscr=GetDefaultPubScreen(pubnptr) IF checkscr=pubscr THEN pubname=Import(pubnptr) CALL FREETHIS(pubnptr) END IF pubname="" THEN DO pubname="Workbench" usewb=1 END ELSE usewb=0 rows=2 gadh=fonth+4 gaddy=gadh+2 DO i=1 TO 3+slines maxwidth.i=0 END charw=TextLength(scrrp,"W"||nullbyte,-1) intw=charw*4+12 strminw=charw*2+6 addwidth=30+intw gperrow=agads%rows+agads//rows DO id=1 TO agads k=1+(id>gperrow) IF labs.id=0 THEN DO gwid.id=TextLength(scrrp,ltxt.id||nullbyte,-1)+34 maxwidth.k=Max(maxwidth.k,gwid.id) END ELSE DO glabels.id=MAKEPOINTER(0,0,4*Abs(labs.id)+4,MEMF_CLEAR) IF glabels.id=Null() THEN RETURN 5 DO i=1 TO Abs(labs.id) lbuf.id.i=MAKEPOINTER(glabels.id,0,Length(ltxt.id.i)+1,MEMF_CLEAR) IF lbuf.id.i=Null() THEN RETURN 5 CALL Export(lbuf.id.i,ltxt.id.i) CALL SETVALUE(glabels.id,(i-1)*4,4,"P",lbuf.id.i) xwid=TextLength(scrrp,ltxt.id.i||nullbyte,-1)+30 IF labs.id>0 THEN xwid=xwid+addwidth maxwidth.k=Max(maxwidth.k,xwid) END END END DO i=1 TO slines nsgads.i=0 END DO id=agads+1 TO agads+sgads gwid.id=TextLength(scrrp,ltxt.id||nullbyte,-1) lin=line.id maxnr=3+lin maxwidth.maxnr=maxwidth.maxnr+gwid.id+strminw+12 nsgads.lin=nsgads.lin+1 END DO id=agads+sgads+1 TO gads gwid.id=TextLength(scrrp,ltxt.id||nullbyte,-1)+6 maxwidth.3=maxwidth.3+gwid.id+2 END maxwidth=Max((Max(maxwidth.1,maxwidth.2)+4)*rows-4,maxwidth.3) DO i=4 TO slines+3 maxwidth=Max(maxwidth,maxwidth.i) END winwid=maxwidth+4 winhi=(gperrow+1+slines)*gaddy+6 gadx=borderl+2 gady=bordert+1 gadw=maxwidth%rows-rows*2+2 gadmaxx=winwid+borderl-2 gadmaxy=winhi+bordert-1 id=0 gx=gadx cyx=gx chkx=gx+gadw-26 intx=gx+gadw-28-intw textplace=PLACETEXT_LEFT DO i=0 TO 1 DO j=0 TO gperrow-1 WHILE id<agads id=i*gperrow+j+1 gadid=id*3 IF labs.id>0 THEN DO newgadx.id=MAKENEWGADGET(scrvinfo,scrfont,gx,gady+j*gaddy,gadw-addwidth,gadh,"",0,gadid,Null()) newgadxb.id=MAKENEWGADGET(scrvinfo,scrfont,chkx,gady+j*gaddy,26,gadh,"",0,gadid+1,Null()) newgadxi.id=MAKENEWGADGET(scrvinfo,scrfont,intx,gady+j*gaddy,intw,gadh,"",0,gadid+2,Null()) IF newgadxb.id=Null() | newgadxi.id=Null() | newgadx.id=Null() THEN RETURN 5 END ELSE DO IF labs.id<0 THEN newgadx.id=MAKENEWGADGET(scrvinfo,scrfont,cyx,gady+j*gaddy,gadw,gadh,"",0,id*3,Null()) ELSE newgadx.id=MAKENEWGADGET(scrvinfo,scrfont,chkx,gady+j*gaddy,26,gadh,ltxt.id,textplace,id*3+1,Null()) IF newgadx.id=Null() THEN RETURN 5 END END chkx=gadmaxx-gadw intx=chkx+28 gx=chkx+addwidth cyx=chkx textplace=PLACETEXT_RIGHT END gy=gady+gaddy*gperrow DO i=1 TO slines gx=gadx maxnr=i+3 strw=(maxwidth-maxwidth.maxnr)%(nsgads.i)+strminw DO id=agads+1 TO agads+sgads IF line.id=i THEN DO nsgads.i=nsgads.i-1 IF nsgads.i=0 THEN strw=gadmaxx-(gx+gwid.id+8) newgadx.id=MAKENEWGADGET(scrvinfo,scrfont,gx+gwid.id+8,gy,strw,gadh,ltxt.id,PLACETEXT_LEFT,id*3+2,Null()) gx=gx+gwid.id+strw+12 IF newgadx.id=Null() THEN RETURN 5 END END gy=gy+gaddy END gx=gadx+(maxwidth-maxwidth.3)%2 DO id=agads+sgads+1 TO gads newgadx.id=MAKENEWGADGET(scrvinfo,scrfont,gx,gadmaxy-gadh,gwid.id,gadh,ltxt.id,PLACETEXT_IN,id*3,Null()) gx=gx+gwid.id+4 IF newgadx.id=Null() THEN RETURN 5 END newgadbv=MAKENEWGADGET(scrvinfo,scrfont,gadx,gadmaxy-gadh-5,maxwidth,2,0,0,Null()) gad=CreateContext(glistptr) prev=gad DO id=1 TO gads IF id>agads THEN IF id>agads+sgads THEN DO checkgad.id=CreateGadget(BUTTON_KIND,prev,newgadx.id,TAG_DONE,0) prev=checkgad.id END ELSE DO IF gtype.id=0 THEN intgad.id=CreateGadget(INTEGER_KIND,prev,newgadx.id,GTIN_NUMBER,val.id,GTIN_MAXCHARS,len.id,STRINGA_EXITHELP,1,TAG_DONE,0) ELSE intgad.id=CreateGadget(STRING_KIND,prev,newgadx.id,GTST_STRING,val.id,GTST_MAXCHARS,len.id,STRINGA_EXITHELP,1,TAG_DONE,0) prev=intgad.id END ELSE IF labs.id=0 THEN DO checkgad.id=CreateGadget(CHECKBOX_KIND,prev,newgadx.id,GTCB_CHECKED,check.id,GTCB_SCALED,-1,TAG_DONE,0) prev=checkgad.id END ELSE IF labs.id>0 THEN DO checkgad.id=CreateGadget(CHECKBOX_KIND,prev,newgadxb.id,GTCB_CHECKED,check.id,GTCB_SCALED,-1,TAG_DONE,0) intgad.id=CreateGadget(INTEGER_KIND,checkgad.id,newgadxi.id,GTIN_NUMBER,val.id,GTIN_MAXCHARS,4,STRINGA_EXITHELP,1,TAG_DONE,0) cyclegad.id=CreateGadget(CYCLE_KIND,intgad.id,newgadx.id,GTCY_LABELS,glabels.id,GTCY_ACTIVE,cycle.id,TAG_DONE,0) prev=cyclegad.id END ELSE DO cyclegad.id=CreateGadget(CYCLE_KIND,prev,newgadx.id,GTCY_LABELS,glabels.id,GTCY_ACTIVE,cycle.id,TAG_DONE,0) prev=cyclegad.id END END prev=CreateGadget(TEXT_KIND,prev,newgadbv,GTTX_BORDER,-1,TAG_DONE,0) IF prev=Null() THEN RETURN 5 mptr=MAKENEWMENU(menus) IF mptr=Null() THEN RETURN 5 CALL ADDTO_NEWMENU(mptr,NM_TITLE,mtitle,"",0,0,Null()) DO i=1 TO menus n=menuoff+i IF ltxt.n="" THEN mtxt=NM_BARLABEL ELSE mtxt=ltxt.n IF i>mchks THEN flags=MENUTOGGLE ELSE flags=CHECKED*check.n+CHECKIT+MENUTOGGLE IF Length(mkey.n)~=1 THEN mkey.n="" CALL ADDTO_NEWMENU(mptr,NM_ITEM,mtxt,mkey.n,flags,0,Null()) END DROP ltxt CALL ADDTO_NEWMENU(mptr,NM_END,"","",0,0,Null()) menu=CreateMenus(mptr,TAG_DONE,0) IF menu=Null() THEN RETURN 5 IF LayoutMenus(menu,scrvinfo,GTMN_NEWLOOKMENUS,-1,TAG_DONE,0)=0 THEN RETURN 5 winidcmp=IDCMP_CHANGEWINDOW+IDCMP_CLOSEWINDOW+IDCMP_GADGETUP+IDCMP_ACTIVEWINDOW+IDCMP_MOUSEBUTTONS+IDCMP_MENUPICK+IDCMP_VANILLAKEY+IDCMP_RAWKEY+IDCMP_MENUHELP winflags=WFLG_CLOSEGADGET+WFLG_DEPTHGADGET+WFLG_DRAGBAR+WFLG_ACTIVATE IF check.mwin THEN DO ymouse=GETVALUE(scr,16,2,"N") xmouse=GETVALUE(scr,18,2,"N") END ELSE DO ymouse=winx+winhi/2 xmouse=winy+winwid/2 END wtagl=MAKEPOINTER(0,0,104+8,MEMF_CLEAR) IF wtagl=Null() THEN RETURN 5 wname=MAKEPOINTER(wtagl,0,Length(wintitle)+1,MEMF_CLEAR) IF wname=Null() THEN RETURN 5 CALL Export(wname,wintitle) sname=MAKEPOINTER(wtagl,0,Length(scrtitle)+1,MEMF_CLEAR) IF sname=Null() THEN RETURN 5 CALL Export(sname,scrtitle) wzipdims=MAKEPOINTER(wtagl,0,8,MEMF_CLEAR) IF wzipdims=Null() THEN RETURN 5 zipwid=winwid+borderl+borderr ziphi=bordert CALL SETVALUE(wzipdims,4,2,"N",zipwid) CALL SETVALUE(wzipdims,6,2,"N",ziphi) CALL SETTAGSLOT(wtagl,0,WA_LEFT,"N",Max(xmouse-winwid/2,0)) CALL SETTAGSLOT(wtagl,1,WA_TOP,"N",Max(ymouse-winhi/2,0)) CALL SETTAGSLOT(wtagl,2,WA_INNERWIDTH,"N",winwid) CALL SETTAGSLOT(wtagl,3,WA_INNERHEIGHT,"N",winhi) CALL SETTAGSLOT(wtagl,4,WA_IDCMP,"N",winidcmp) CALL SETTAGSLOT(wtagl,5,WA_FLAGS,"N",winflags) CALL SETTAGSLOT(wtagl,6,WA_TITLE,"P",wname) CALL SETTAGSLOT(wtagl,7,WA_SCREENTITLE,"P",sname) CALL SETTAGSLOT(wtagl,8,WA_GADGETS,"P",gad) IF pubonly THEN CALL SETTAGSLOT(wtagl,9,WA_PUBSCREEN,"P",scr) ELSE CALL SETTAGSLOT(wtagl,9,WA_CUSTOMSCREEN,"P",scr) CALL SETTAGSLOT(wtagl,10,WA_ZOOM,"P",wzipdims) CALL SETTAGSLOT(wtagl,11,WA_NEWLOOKMENUS,"N",-1) CALL SETTAGSLOT(wtagl,12,WA_MENUHELP,"N",-1) CALL SETTAGSLOT(wtagl,13,TAG_DONE,"N",0) win=OpenWindowTagList(portname,Null(),wtagl,0) IF win=Null() THEN RETURN 5 rp=GETWINDOWRASTPORT(win) dwid=GETVALUE(win,8,2,"N")-zipwid dhi=GETVALUE(win,10,2,"N")-ziphi CALL GT_RefreshWindow(win,Null()) CALL SetMenuStrip(win,menu) zoomed=1 RETURN 0 messy: IF port=0 THEN RETURN DO FOREVER msg=GetPkt(portname) IF msg=Null() THEN LEAVE msgclass=GetArg(msg,0) zipped=GETVALUE(win,10,2,"N")=ziphi IF ~Datatype(msgclass,"W") THEN CALL rx ELSE DO code=GetArg(msg,1) qual=GetArg(msg,2) gadid=GetArg(msg,9) CALL Reply(msg,0) END actgads=check.mgad & ~zipped nospiral=~check.spl IF msgclass=IDCMP_VANILLAKEY THEN DO code=C2D(Upper(D2C(code))) DO id=1 TO kgads IF code=lkey.id | code=lkey2.id THEN DO IF id=zipgad THEN DO CALL ZipWindow(win) LEAVE END ELSE IF id=depthgad THEN DO windowpos=~windowpos IF windowpos THEN CALL WindowToBack(win) ELSE CALL WindowToFront(win) LEAVE END ELSE IF id>agads+sgads THEN DO closed=id-agads LEAVE END IF ~zipped THEN DO msgclass=IDCMP_GADGETUP type=(qual//4)//3 IF labs.id=0 THEN type=1 IF labs.id<0 THEN type=0 IF id>agads THEN type=2 gadid=id*3+type IF type=2 | (actgads & ~(check.id & type=1)) THEN CALL ActivateGadget(intgad.id,win,Null()) IF type=1 THEN code=~check.id IF labs.id>=0 & type=1 THEN CALL GT_SetGadgetAttrs(checkgad.id,win,Null(),GTCB_CHECKED,code) IF type=0 THEN code=(cycle.id+1)//Abs(labs.id) IF labs.id~=0 & type=0 THEN CALL GT_SetGadgetAttrs(cyclegad.id,win,Null(),GTCY_ACTIVE,code) LEAVE END END END END SELECT WHEN msgclass=IDCMP_CLOSEWINDOW THEN closed=winclose WHEN msgclass=IDCMP_MENUPICK THEN DO mnr=(code%32)//32+1 n=menuoff+mnr IF mnr<=mchks THEN check.n=~check.n SELECT WHEN n=mload THEN CALL loaddef(2) WHEN n=msave THEN CALL savedef(2) WHEN n=mres THEN CALL loaddef(1) WHEN n=mdef THEN CALL loaddef(0) WHEN n=mabt THEN CALL message(0,about) WHEN n=mtext THEN IF portok THEN DO resume="BACKMESSY" errtrap=10 TextBlockPrefs "PROMPT" END WHEN n=moval THEN IF portok THEN DO resume="BACKMESSY" errtrap=10 OvalPrefs "PROMPT" END WHEN n=mnext THEN DO x=SubStr(rxport,Length(finalw)+1) i=x DO UNTIL Show("P",rxport) | i=x i=i//20+1 rxport=finalw||i END IF x~=i THEN closed=nextclose END WHEN n=mrexx THEN IF lib.reqtools THEN DO i=Max(Pos(defdir,':'),LastPos('/',defdir)) resume="BACKMESSY" errtrap=14 newdir=RTFileRequest(SubStr(defdir,1,i),DelStr(defdir,1,i),rxfilerq,rxfileok,"RT_SCREENTOFRONT=TRUE") IF newdir~="" THEN DO defdir=newdir IF xexists("ENV:FinalWrapper") THEN IF Open(prefs,"ENV:FinalWrapper/FWPath","W") THEN DO CALL WriteLn(prefs,defdir) CALL Close(prefs) END closed=rxclose END END WHEN n=mhelp THEN IF help THEN DO IF usewb THEN CALL WBenchToFront() ELSE CALL ScreenToFront(pubscr) CALL Shownode(pubname,docfile,"MAIN",1,0) CALL ScreenToFront(scr) END ELSE CALL message(0,nohelp) OTHERWISE NOP END END WHEN actgads & (msgclass=IDCMP_ACTIVEWINDOW | msgclass=IDCMP_MOUSEBUTTONS) THEN CALL ActivateGadget(intgad.1,win,Null()) WHEN msgclass=IDCMP_MENUHELP | (code=95 & (msgclass=IDCMP_RAWKEY | msgclass=IDCMP_GADGETUP)) THEN IF help THEN DO IF usewb THEN CALL WBenchToFront() ELSE CALL ScreenToFront(pubscr) mnr=(code%32)//32+1+menuoff IF msgclass=IDCMP_MENUHELP THEN node=mnode.mnr ELSE IF zipped THEN node=gnode.0 ELSE DO ymouse=getshort(C2D(win),12) xmouse=getshort(C2D(win),14) gad=GETVALUE(win,62,4,"P") id=0 IF xmouse>=0 & ymouse>=0 & xmouse<dwid+zipwid & ymouse<dhi+ziphi & gad~=Null() THEN DO UNTIL gad=Null() x=getshort(C2D(gad),4) y=getshort(C2D(gad),6) w=getshort(C2D(gad),8) h=getshort(C2D(gad),10) i=GETVALUE(gad,38,2,"N") IF xmouse>=x & xmouse<=x+w & ymouse>=y & ymouse<=y+h & i>0 THEN DO id=i%3 LEAVE END ELSE gad=GETVALUE(gad,0,4,"P") END node=gnode.id END CALL Shownode(pubname,docfile,node,1,0) CALL ScreenToFront(scr) END ELSE CALL message(0,nohelp) WHEN msgclass=IDCMP_GADGETUP THEN DO type=gadid//3 id=gadid%3 SELECT WHEN id>agads+sgads THEN closed=id-agads WHEN type=2 THEN CALL checkstrgad WHEN type=1 THEN DO check.id=code IF labs.id>0 & check.id~=0 & actgads THEN CALL ActivateGadget(intgad.id,win,Null()) END OTHERWISE DO cycle.id=code check.id=1 IF labs.id>0 THEN CALL GT_SetGadgetAttrs(checkgad.id,win,Null(),GTCB_CHECKED,check.id) IF labs.id>0 & actgads THEN CALL ActivateGadget(intgad.id,win,Null()) END END END OTHERWISE NOP END IF check.mspl THEN IF check.spl & nospiral THEN DO cycle.adj=adjarc-1 CALL GT_SetGadgetAttrs(cyclegad.adj,win,Null(),GTCY_ACTIVE,cycle.adj) END END BACKMESSY: IF trapped THEN DO trapped=0 IF err=14 THEN DO lib.reqtools=0 CALL message(0,noreqtools) END END RETURN checkstrgad: old=val.id specialinfo=GETVALUE(intgad.id,34,4,"P") IF id>agads THEN DO IF gtype.id=0 THEN val.id=GETVALUE(specialinfo,28,4,"N") ELSE DO gval=GETVALUE(specialinfo,0,4,"S") IF gtype.id=1 & gval~=old THEN DO IF gval~="" THEN IF ~Datatype(replacepat(gval,",","."),"N") THEN DO IF closed=okclose THEN closed=0 IF closed=0 THEN CALL message(0,replacepat(notnum,"%g",ltxt.id)) END ELSE IF deci="COMMA" THEN val.id=replacepat(Max(replacepat(gval,",","."),0),".",",") ELSE val.id=Max(replacepat(gval,",","."),0) ELSE val.id="" IF val.id~=gval THEN CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTST_STRING,val.id) END ELSE IF gtype.id=2 THEN val.id=gval END END ELSE DO gval=GETVALUE(specialinfo,28,4,"N") val.id=Max(Min(ubound.id,gval),lbound.id) IF val.id~=gval THEN CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTIN_NUMBER,val.id) check.id=check.id | (old~=val.id & actgads) IF old~=val.id | actgads THEN CALL GT_SetGadgetAttrs(checkgad.id,win,Null(),GTCB_CHECKED,check.id) END RETURN rx: PARSE VAR msgclass comm ar.1 ar.2 ar.3 arg1=Upper(ar.1) arg2=SubStr(msgclass,Pos(ar.1,msgclass,Length(comm)+1)+Length(ar.1)+1) IF Datatype(arg1,"U") THEN INTERPRET "id="||arg1 comm=Upper(comm) full=msgclass msgclass=0 ret=0 res=0 SELECT WHEN comm="SETVAL" THEN IF checksyntax("W") & ar.2~="" THEN SELECT WHEN id>0 & id<=agads THEN IF labs.id>0 & Datatype(ar.2,"W") THEN DO gadid=id*3+2 msgclass=IDCMP_GADGETUP code=0 CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTIN_NUMBER,ar.2) res=val.id END WHEN id>agads & id<=agads+sgads THEN IF Datatype(replacepat(ar.2,",","."),Word("W N A",gtype.id+1)) | gtype.id=2 THEN DO gadid=id*3+2 msgclass=IDCMP_GADGETUP code=0 IF gtype.id=2 THEN CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTST_STRING,arg2) ELSE IF gtype.id=1 THEN CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTST_STRING,ar.2) ELSE CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTIN_NUMBER,ar.2) res=val.id END OTHERWISE NOP END WHEN comm="SETMODE" THEN IF checksyntax("W","w") & id>0 & id<=agads & labs.id~=0 THEN DO gadid=id*3 msgclass=IDCMP_GADGETUP code=ar.2 CALL GT_SetGadgetAttrs(cyclegad.id,win,Null(),GTCY_ACTIVE,code) res=cycle.id END WHEN comm="SETSTATE" THEN IF checksyntax("W","w") THEN IF id>0 & id<=agads & labs.id>=0 THEN DO gadid=id*3+1 msgclass=IDCMP_GADGETUP code=(ar.2~=0) CALL GT_SetGadgetAttrs(checkgad.id,win,Null(),GTCB_CHECKED,code) res=check.id END ELSE IF id>menuoff & id<=menuoff+mchks THEN DO check.id=(ar.2~=0) CALL ClearMenuStrip(win) item=GETVALUE(menu,18,4,"P") DO n=menuoff+1 TO id-1 item=GETVALUE(item,0,4,"P") END flags=C2D(B2C(BitAnd(C2B(D2C(GETVALUE(item,12,2,"N"),2)),"1111111011111111")))+CHECKED*check.id CALL SETVALUE(item,12,2,"N",flags,0) CALL ResetMenuStrip(win,menu) msgclass=-1 END WHEN comm="GETVAL" THEN IF checksyntax("W") & id>0 & ((id<=agads & labs.id>0) | id<=agads+sgads) THEN DO specialinfo=GETVALUE(intgad.id,34,4,"P") IF id>agads & gtype.id~=0 THEN DO val=GETVALUE(specialinfo,0,4,"S") IF gtype.id=1 THEN val=replacepat(val,",",".") END ELSE val=GETVALUE(specialinfo,28,4,"N") res=val msgclass=-1 END WHEN comm="GETMODE" THEN IF checksyntax("W") & id>0 & id<=agads THEN DO res=cycle.id msgclass=-1 END WHEN comm="GETSTATE" THEN IF checksyntax("W") & ((id>0 & id<=agads & labs.id>=0) | (id>menuoff & id<=menuoff+mchks)) THEN DO res=check.id msgclass=-1 END WHEN comm="USE" THEN IF checksyntax("W") THEN IF id>=agads+sgads & id<=kgads THEN DO msgclass=-1 IF id=zipgad THEN CALL ZipWindow(win) ELSE IF id=depthgad THEN DO windowpos=~windowpos IF windowpos THEN CALL WindowToBack(win) ELSE CALL WindowToFront(win) END ELSE DO msgclass=IDCMP_GADGETUP code=0 gadid=id*3 END END ELSE IF id>menuoff+mchks & id<=menuoff+mchks+macts THEN DO msgclass=IDCMP_MENUPICK code=(id-1-menuoff)*32 END WHEN comm="SET" THEN DO msgclass=-1 SELECT WHEN Abbrev("PORT",arg1,1) THEN DO IF Show("P",ar.2) & Left(ar.2,Length(finalw))=finalw THEN rxport=ar.2 res=rxport END WHEN Abbrev("SCREEN",arg1,1) THEN DO IF arg2="" THEN stitle=origscrtitle ELSE stitle=arg2 scrtitle=replacepat(replacepat(stitle,"%f",doc),"%i",info) CALL SetWindowTitles(win,wintitle,scrtitle) END WHEN Abbrev("WINDOW",arg1,1) THEN DO IF arg2="" THEN wtitle=origwintitle ELSE wtitle=arg2 wintitle=replacepat(replacepat(wtitle,"%f",doc),"%i",info) CALL SetWindowTitles(win,wintitle,scrtitle) END WHEN Abbrev("ZIP",arg1,1) THEN DO res=zipped zipped=(ar.2~=0) IF zipped~=res THEN CALL ZipWindow(win) END OTHERWISE msgclass=0 END END WHEN comm="GET" THEN DO msgclass=-1 SELECT WHEN Abbrev("PORT",arg1,1) THEN IF portok THEN res=rxport ELSE res="" WHEN Abbrev("REQTOOLS",arg1,1) THEN res=lib.reqtools WHEN Abbrev("SCREEN",arg1,1) THEN res=scrtitle WHEN Abbrev("VERSION",arg1,1) THEN res=version WHEN Abbrev("WINDOW",arg1,1) THEN res=wintitle WHEN Abbrev("ZIP",arg1,1) THEN res=zipped OTHERWISE msgclass=0 END END WHEN comm="PREFS" THEN DO msgclass=-1 IF Abbrev("STORE",arg1,1) THEN DO CALL savedef(1) prefsstore=0 END ELSE IF Abbrev("RESET",arg1,1) THEN DO CALL loaddef(1) prefsstore=1 END ELSE CALL loaddef(0) END WHEN comm="POPFRONT" THEN DO IF zipped THEN CALL ZipWindow(win) CALL WindowToFront(win) CALL ScreenToFront(scr) CALL ActivateWindow(win) msgclass=-1 END WHEN comm="DIE" THEN DO msgclass=-1 res=lockcnt IF lockcnt=0 THEN DO CALL Reply(msg,0) IF ar.1~="" & Datatype(ar.1,"W") THEN IF ar.2~="" THEN DO CALL message(ar.1,replacepat(ar.2,"_"," "),replacepat(ar.3,"_"," ")) IF ar.1=0 THEN CALL bye(0) END ELSE CALL bye(ar.1) ELSE CALL bye(0) END END WHEN comm="MESSAGE" THEN DO msgclass=-1 res=message(0,replacepat(ar.1,"_"," "),replacepat(ar.2,"_"," "),replacepat(ar.3,"_"," ")) END WHEN comm="LOCK" THEN DO msgclass=-1 IF Abbrev("ON",arg1,2) THEN lockcnt=lockcnt+1 ELSE IF Abbrev("OFF",arg1,2) THEN lockcnt=Max(0,lockcnt-1) ELSE IF Abbrev("RESET",arg1,1) THEN lockcnt=0 res=lockcnt END WHEN comm="ABORT" THEN msgclass=-1 WHEN comm="GO" THEN DO msgclass=IDCMP_GADGETUP code=0 gadid=okgad*3 replymsg=msg stilltoreply=1 RETURN END OTHERWISE NOP END IF msgclass=0 THEN CALL Reply(msg,5) ELSE CALL Reply(msg,ret,res) IF msgclass=0 THEN CALL message(0,replacepat(rxcmderr,"%c",full)) RETURN quickmessy: IF port=0 THEN RETURN 0 DO FOREVER msg=GetPkt(portname) IF msg=Null() THEN LEAVE msgclass=GetArg(msg,0) IF msgclass=IDCMP_CLOSEWINDOW THEN closed=winclose ELSE IF msgclass=IDCMP_CHANGEWINDOW THEN IF ~BitTst(D2C(GETVALUE(win,24,4,"N")),28) THEN CALL ZipWindow(win) IF Datatype(msgclass,"W") THEN CALL Reply(msg,0) ELSE IF Upper(msgclass)="ABORT" THEN DO closed=winclose CALL Reply(msg,0) END ELSE CALL Reply(msg,1) END RETURN closed~=0 guiclean: IF cleangui THEN DO IF pubscr~=Null() THEN CALL UnLockPubScreen(Null(),pubscr) IF menu~=Null() THEN CALL ClearMenuStrip(win) IF win~=Null() THEN CALL CloseWindow(win) IF menu~=Null() THEN CALL FreeMenus(menu) IF gad~=Null() THEN CALL FreeGadgets(gad) IF scrvinfo~=Null() THEN CALL FreeVisualInfo(scrvinfo) IF port THEN CALL ClosePort(portname) port=0 DO id=1 TO gads CALL FREETHIS(newgadx.id) CALL FREETHIS(newgadxi.id) CALL FREETHIS(newgadxb.id) CALL FREETHIS(glabels.id) END CALL FREETHIS(newgadbv) CALL FREETHIS(mptr) CALL FREETHIS(wtagl) CALL FREETHIS(glistptr) CALL FREETHIS(pubnptr) cleangui=0 END RETURN options: GetTextBlockPrefs "TEXTFLOW FLOWDIST TEXT" PARSE VAR RESULT defflow deffld deftext defprfs="" IF defflow~="" THEN defprfs=defprfs "TEXTFLOW" defflow IF deffld~="" THEN defprfs=defprfs "FLOWDIST" deffld IF deftext~="" THEN defprfs=defprfs "TEXT" deftext GetTextBlockTypePrefs "SIZE LEADING WIDTH OBLIQUE POSITION CASE STYLE COLOR FONT" PARSE VAR RESULT tsize tlead twid tobl tpos tcase tstyl tcol tfont defspecs="SIZE" tsize "LEADING" tlead "WIDTH" twid "OBLIQUE" tobl "POSITION" tpos "CASE" tcase "STYLE" tstyl defcolour="COLOR" tcol IF Left(tfont,1)~=" " THEN tfont=" "||tfont deffont="FONT"||tfont ssize=360 start="+0" Status "PAGES" docpages=RESULT IF val.xgad~="" THEN ovalx=replacepat(val.xgad,",",".") IF val.ygad~="" THEN ovaly=replacepat(val.ygad,",",".") IF val.wgad~="" THEN ovalw=replacepat(val.wgad,",",".") IF val.hgad~="" THEN ovalh=replacepat(val.hgad,",",".") IF val.pgad~=0 THEN ovalp=Min(Max(val.pgad,1),docpages) IF Left(text,Min(len.tgad,Length(text)))~=val.tgad THEN DO text=val.tgad gadgettext=1 virtualtext=1 END rescan=Length(text)=0 IF check.arc THEN ssize=SubStr("+-",cycle.arc+1,1)||val.arc IF check.beg THEN start=SubStr(" -+",cycle.beg+1,1)||val.beg norrot=~check.rot IF check.rot THEN IF cycle.rot=1 THEN rrot="=" ELSE IF cycle.rot=0 THEN rrot=val.rot ELSE DO rrot=SubStr("+-",cycle.rot//2+1,1)||val.rot IF cycle.rot>3 THEN rrot=" "||rrot END ELSE rrot="" delete=SubStr("- +=",cycle.dlt+1,1) ogrp=SubStr(" +-",cycle.grp+1,1) dordim=check.spl rdim="" IF check.spl THEN rdim=SubStr("+-",cycle.spl+1,1)||val.spl dohdim=check.siz | check.spl hdim="" IF check.siz THEN hdim=SubStr("+-",cycle.siz+1,1)||val.siz ELSE IF check.spl THEN hdim=rdim doresize=check.zoo IF check.zoo THEN DO resize=val.zoo resizek=SubStr("+|-",cycle.zoo+1,1) END adjust=cycle.adj doadj=(adjust>0) fillcol=cycle.ink//2 shadow=cycle.ink=3 | cycle.ink=4 resetcol=(cycle.ink=0) | shadow attr=check.pat wordmd=check.wrd charmd=~wordmd IF ssize=0 THEN ssize=0.01 absstart=0 IF Verify(Left(start,1),"+-","m")=0 THEN DO absstart=1 start=Max(Min(start,360),0) END ELSE start=Max(Min(start,360),-360) IF dordim THEN rdim=Max(Min(rdim,100),-100) ELSE ssize=Max(Min(ssize,360),-360) IF rdim=0 THEN rdim=0.01 IF dohdim THEN hdim=Max(Min(hdim,100),-100) ELSE hdim=rdim IF hdim=0 THEN hdim=0.01 IF doresize THEN DO resizex=Max(Min(resize,1000),5)/100 resizey=resizex resize=resizex IF resizek="|" THEN resizex=1 ELSE IF resizek="-" THEN resizey=1 END drot=0 deltarot=0 dodrot=0 IF Verify(Left(rrot,1),"+-","m")>0 THEN DO drot=Max(Min(rrot,360),-360) rrot="" norrot=1 END ELSE IF Left(rrot,1)=" " & rrot~="" THEN DO deltarot=Max(Min(rrot,360),-360) dodrot=1 rrot=0 END ELSE IF rrot~="" & rrot~="=" THEN rrot=Max(Min(rrot,360),-360) IF rrot="=" THEN rrot=txtrot||" " RETURN chosenobjs: ovalrescan=0 txtrescan=0 txt=0 oval=0 len=0 FirstObject "SELECTED" o=RESULT IF o~=0 THEN DO cnt=0 DO UNTIL o=0 gobj.cnt=o NextObject o "SELECTED" o=RESULT cnt=cnt+1 END DO i=0 TO cnt-1 WHILE oval=0 | txt=0 GetObjectType gobj.i IF RESULT=7 THEN txt=gobj.i IF RESULT=6 THEN oval=gobj.i END END IF oval=0 THEN oval=oldoval ELSE ovalrescan=1 IF gadgettext THEN len=Length(text) IF gadgettext & ~(init | rescan) THEN txt=0 CALL getattr Status "PARAPOS" pos=RESULT PARSE VAR pos para ppos x Status "PARACHARS" plen=RESULT IF txt=0 & ~newattr THEN IF Words(pos)=4 & (~gadgettext | rescan | init) THEN DO Extract text=RESULT len=Length(text) IF C2X(Right(text,1))="0A" THEN len=len-1 text="" MoveToPara para ppos virtualtext=0 ppos=0 END ELSE IF plen~=0 & (rescan | ((plen~=oldplen | para~=oldpara | ppos~=oldppos) & ~gadgettext)) THEN DO len=plen text="" virtualtext=0 IF ppos~=0 THEN MoveToPara para 0 ppos=0 END IF txt>0 THEN DO GetTextBlockText txt text=RESULT len=Length(text) END IF len=0 THEN DO objs=oldobjs len=oldlen END ELSE txtrescan=1 IF (len=0 | oval=0) & ~init THEN DO IF len=0 & text~="" THEN DO len=Length(text) txtrescan=1 END IF oval=0 & ovalx~="" & ovaly~="" & ovalw~="" & ovalh~="" & ovalp~="" THEN oval=-1 IF len=0 | oval=0 THEN DO CALL message(0,noselect) RETURN 5 END END gadgettext=0 oldoval=oval oldtxt=txt oldlen=len oldobjs=objs oldpara=para oldppos=ppos oldplen=plen redrawchars=1 RETURN 0 getattr: newattr=0 IF ~attr | init THEN RETURN 5 Status "PARAPOS" pos=RESULT IF Words(pos)~=4 THEN RETURN 5 PARSE VAR pos para ppos x Extract atext=RESULT MoveToPara para ppos alen=Length(atext) IF C2X(Right(atext,1))="0A" THEN alen=alen-1 IF alen=0 THEN RETURN 5 DO i=1 TO alen Cursor "RIGHT" aspecs.i=gettexttypespecs() Status "FONTNAME" afont.i="FONT" RESULT Status "FONTCOLOR" acolour.i="COLOR" RESULT IF quickmessy() THEN DO CALL remobjs oldlen=0 alen=0 oldobjs=0 RETURN 5 END END MoveToPara para 0 oldppos=0 oldpara=para Status "PARACHARS" oldplen=RESULT newattr=1 RETURN 0 oval: IF ovalrescan THEN DO GetObjectRotation oval orot=RESULT IF orot~=0 THEN SetObjectRotation oval 0 GetObjectCoords oval PARSE VAR RESULT ovalp ovalx ovaly ovalw ovalh val.xgad=Left(ovalx,Min(len.xgad,Length(ovalx))) val.ygad=Left(ovaly,Min(len.ygad,Length(ovaly))) val.wgad=Left(ovalw,Min(len.wgad,Length(ovalw))) val.hgad=replacepat(Left(ovalh,Min(len.hgad,Length(ovalh)))," ","") val.pgad=Left(ovalp,Min(len.pgad,Length(ovalp))) IF deci="COMMA" THEN DO val.xgad=replacepat(val.xgad,".",",") val.ygad=replacepat(val.ygad,".",",") val.wgad=replacepat(val.wgad,".",",") val.hgad=replacepat(val.hgad,".",",") END IF cleangui THEN DO CALL GT_SetGadgetAttrs(intgad.xgad,win,Null(),GTST_STRING,val.xgad) CALL GT_SetGadgetAttrs(intgad.ygad,win,Null(),GTST_STRING,val.ygad) CALL GT_SetGadgetAttrs(intgad.wgad,win,Null(),GTST_STRING,val.wgad) CALL GT_SetGadgetAttrs(intgad.hgad,win,Null(),GTST_STRING,val.hgad) CALL GT_SetGadgetAttrs(intgad.pgad,win,Null(),GTIN_NUMBER,val.pgad) END GetObjectParams oval "TEXTFLOW FLOWDIST LINECOLOR FILLCOLOR" PARSE VAR RESULT flow fld ovlcol ovfcol IF Left(flow,5)="Right" THEN flow="Right" ELSE IF Left(flow,4)="Left" THEN flow="Left" IF delete="=" THEN DO SelectObject oval Copy END IF delete~="-" & ogrp=" " THEN DeleteObject oval ELSE IF doresize THEN SetObjectCoords oval x+rx*(1-resizex) y+ry*(1-resizey) rx*resizex*2 ry*resizey*2 ovalscanned=1 END IF oval~=0 THEN DO GetPageSetup "WIDTH" "HEIGHT" PARSE VAR RESULT pagew pageh rx=ovalw/2 ry=ovalh/2 xm=Min(ovalx,pagew)+rx ym=Min(ovaly,pageh)+ry page=ovalp END IF ~ovalscanned THEN DO GetOvalPrefs "TEXTFLOW FLOWDIST LINECOLOR FILLCOLOR" PARSE VAR RESULT flow fld ovlcol ovfcol IF Left(flow,5)="Right" THEN flow="Right" ELSE IF Left(flow,4)="Left" THEN flow="Left" orot=0 END IF fillcol THEN ovcol=ovfcol ELSE ovcol=ovlcol TextBlockPrefs "TEXTFLOW" flow "FLOWDIST" fld IF ~resetcol THEN TextBlockTypePrefs "COLOR" ovcol RETURN text: usesheet=alen>0 & attr IF ~(txtrescan | dirtysize | (sheetused ^ usesheet) | newattr) THEN RETURN DO i=1 TO len x=SubStr(text,i,1) IF usesheet THEN DO attrn=(i-1)//alen+1 TextBlockTypePrefs afont.attrn IF resetcol THEN TextBlockTypePrefs aspecs.attrn acolour.attrn ELSE TextBlockTypePrefs aspecs.attrn END ELSE DO j=i-1 IF font.i~=font.j THEN TextBlockTypePrefs font.i IF resetcol & (colour.i~=colour.j) THEN TextBlockTypePrefs specs.i colour.i ELSE IF specs.i~=specs.j THEN TextBlockTypePrefs specs.i END IF Verify(x,'";= ',"M") THEN x='"'||x||'"' DrawTextBlock page xm ym x obj.i=RESULT objs=objs+1 IF check.mrel THEN Redraw GetObjectCoords PARSE VAR RESULT x x x objw.objs objh.objs IF quickmessy() THEN DO CALL remobjs dirtysize=1 oldlen=0 oldobjs=0 RETURN END END sheetused=usesheet dirtysize=0 redrawchars=0 RETURN scan: IF ~(txtrescan | dirtytext) | len=0 THEN RETURN IF txt>0 THEN DO redrawchars=0 GetObjectTypeSpecs txt "SIZE LEADING WIDTH OBLIQUE POSITION CASE STYLE COLOR FONT" PARSE VAR RESULT tsize tlead twid tobl tpos tcase tstyl tcol tfont prfs="SIZE" tsize "LEADING" tlead "WIDTH" twid "OBLIQUE" tobl "POSITION" tpos "CASE" tcase "STYLE" tstyl colourp="COLOR" tcol IF Left(tfont,1)~=" " THEN tfont=" "||tfont fontp="FONT"||tfont GetObjectRotation txt txtrot=RESULT IF delete="+" THEN DeleteObject txt IF Right(rrot,1)=" " THEN rrot=txtrot virtualtext=0 DO i=1 TO len specs.i=prfs font.i=fontp colour.i=colourp END END ELSE IF virtualtext THEN DO i=1 TO len specs.i=defspecs font.i=deffont colour.i=defcolour END ELSE IF text="" | dirtytext THEN DO text="" DO i=1 TO len Extract x=rembad(RESULT) text=text||x Cursor "RIGHT" specs.i=gettexttypespecs() Status "FONTNAME" font.i="FONT" RESULT Status "FONTCOLOR" colour.i="COLOR" RESULT IF quickmessy() THEN DO CALL remobjs oldlen=0 dirtytext=1 oldobjs=0 RETURN END END MoveToPara para 0 val.tgad=Left(text,Min(len.tgad,Length(text))) IF cleangui THEN CALL GT_SetGadgetAttrs(intgad.tgad,win,Null(),GTST_STRING,val.tgad) END dirtytext=0 IF text~="" THEN DO IF C2X(Right(text,1))="0A" THEN DO len=len-1 text=Left(text,len) END text=rembad(text) old=val.tgad val.tgad=Left(text,Min(len.tgad,Length(text))) IF cleangui & val.tgad~=old THEN CALL GT_SetGadgetAttrs(intgad.tgad,win,Null(),GTST_STRING,val.tgad) END RETURN initwrap: txtw=0 wnr=1 wordbeg=1 wordw=0 IF wordmd THEN DO wn=1 whi.wn=0 DO n=1 TO len whi.wn=Max(objh.n,whi.wn) IF SubStr(text,n,1)=" " | n=len THEN DO txtw=txtw+whi.wn wn=wn+1 whi.wn=0 END END END ELSE DO n=1 TO len txtw=txtw+objw.n END PI=3.141593 deg2rad=PI/180 smin=0.1 rx=Max(rx,smin) ry=Max(ry,smin) sizerad=ssize*deg2rad angstep=sizerad/txtw IF doresize THEN angstep=angstep/resize IF absstart THEN angstart=start*deg2rad ELSE angstart=(ssize-360+start*2)/2*deg2rad adone=angstart flip=Sign(ssize) ssize=ssize<0 fr=0 IF dordim THEN DO fr=(1-Abs(rdim)/100)/sizerad*Sign(rdim) IF rdim<0 THEN fr0=Abs(rdim)/100 ELSE fr0=1 END ELSE qr=1 IF dohdim THEN DO fh=(1-Abs(hdim)/100)/sizerad*Sign(hdim) IF hdim<0 THEN fh0=Abs(hdim)/100 ELSE fh0=1 END ELSE qh=1 wdone=0 o=0 rxx=rx ryy=ry IF doresize THEN DO rxx=rxx*resizex ryy=ryy*resizey END sobjs=0 resetprefs=redrawchars | shadow recalcchar=resetprefs | wordmd usesheet=(alen>0) & attr RETURN wrap: CALL initwrap DO n=1 TO len IF recalcchar THEN DO char=SubStr(text,n,1) IF Verify(char,'";= ',"M") THEN char='"'||char||'"' END cw=objw.n ch=objh.n o=obj.n IF charmd THEN DO CALL position x=rxx*Sin(f)*qr-cw/2 y=ryy*Cos(f)*qr IF ~check.mrel THEN y=y-ch/2 END IF resetprefs THEN DO IF usesheet THEN DO attrn=(n-1)//alen+1 TextBlockTypePrefs afont.attrn IF resetcol THEN TextBlockTypePrefs aspecs.attrn acolour.attrn ELSE TextBlockTypePrefs aspecs.attrn END ELSE DO m=n-1 IF font.n~=font.m THEN TextBlockTypePrefs font.n IF resetcol & (colour.n~=colour.m | shadow) THEN TextBlockTypePrefs specs.n colour.n ELSE IF specs.n~=specs.m THEN TextBlockTypePrefs specs.n END END IF wordmd THEN DO x=wordw y=(whi.wnr-objh.n)/2 wordw=wordw+objw.n crot=0 END IF redrawchars THEN DO DrawTextBlock page x+xm y+ym char obj.n=RESULT objs=objs+1 IF check.mrel THEN Redraw o=obj.n IF cw~=objw.n | ch~=objh.n THEN SetObjectCoords o page x+xm y+ym cw ch END ELSE SetObjectCoords o page x+xm y+ym cw ch SetObjectRotation o crot IF shadow THEN DO TextBlockTypePrefs "COLOR" ovcol DrawTextBlock page x+xm+rx/10 y+ym+ry/10 char sobj.n=RESULT sobjs=sobjs+1 IF check.mrel THEN Redraw IF cw~=objw.n | ch~=objh.n THEN SetObjectCoords sobj.n page x+xm+rx/10 y+ym+ry/10 cw ch SetObjectRotation sobj.n crot END IF wordmd THEN IF char='" "' | n=len THEN CALL endofword IF quickmessy() THEN DO CALL remobjs RETURN END END RETURN position: IF doresize THEN DO cw=cw*resize ch=ch*resize END f=angstart-angstep*(wdone+cw/2) wdone=wdone+cw IF dordim THEN qr=fr0+fr*(f-angstart) IF dohdim THEN DO qh=fh0+fh*(f-angstart) ch=Max(ch*qh,smin) cw=Max(cw*qh,smin) END IF doadj THEN IF adjust=4 THEN DO asize=1.1*cw/radius(adone,rxx,ryy,qr) f=adone-asize/2*flip adone=adone-asize*flip END ELSE DO carc=radius(f,rxx,ryy,qr)*angstep/qr IF adjust=1 THEN ch=ch*carc IF adjust=3 THEN ch=ch/Sqrt(carc) cw=cw*carc END IF norrot THEN crot=720-Trunc(Atan(ryy/rxx*Tan(f))/PI*180)+180*((Cos(f)>0)+ssize)+drot ELSE DO IF dodrot & n=1 THEN rrot=720-Trunc(Atan(ryy/rxx*Tan(f))/PI*180)+180*((Cos(f)>0)+ssize) crot=rrot+deltarot*(n-1)//360+360 END crot=crot//360 RETURN endofword: cw=whi.wnr ch=1 CALL position x=rxx*Sin(f)*qr-wordw/2 y=ryy*Cos(f)*qr-whi.wnr crot=(crot+270)//360 IF shadow THEN DO SelectObject DO i=wordbeg TO n SelectObject sobj.i "MULTIPLE" END Group CurrentObject wsobj.wnr=RESULT GetObjectCoords SetObjectCoords wsobj.wnr page x+xm+rx/10 y+ym+ry/10 Word(RESULT,4)*ch Word(RESULT,5)*cw/whi.wnr SetObjectRotation wsobj.wnr crot END SelectObject DO i=wordbeg TO n SelectObject obj.i "MULTIPLE" END Group CurrentObject wobj.wnr=RESULT GetObjectCoords SetObjectCoords wobj.wnr page x+xm y+ym Word(RESULT,4)*ch Word(RESULT,5)*cw/whi.wnr SetObjectRotation wobj.wnr crot wordbeg=n+1 wnr=wnr+1 wordw=0 RETURN group: IF ~ovalrescan & ogrp~=" " THEN DO DrawOval ovalp ovalx ovaly ovalw ovalh oval=RESULT ovalrescan=1 Redraw END IF ovalrescan THEN DO IF ogrp="-" THEN DO SelectObject oval SetObjectParams oval "LINEWT NONE FILL TRANSPARENT" END IF orot~=0 & delete="-" & ogrp=" " THEN SetObjectRotation oval orot END SelectObject IF wordmd THEN DO n=1 TO wnr-1 SelectObject wobj.n "MULTIPLE" END ELSE DO n=1 TO objs SelectObject obj.n "MULTIPLE" END Group i=RESULT IF ogrp~=" " THEN DO SelectObject oval "MULTIPLE" Group END objs=0 IF orot~=0 THEN SetObjectRotation 0 orot IF shadow THEN DO SelectObject IF wordmd THEN DO n=1 TO wnr-1 SelectObject wsobj.n "MULTIPLE" END ELSE DO n=1 TO sobjs SelectObject sobj.n "MULTIPLE" END Group sobjs=0 IF orot~=0 THEN SetObjectRotation 0 orot ObjectToBack 0 END Redraw RETURN bye: PARSE ARG errnr errtrap=-2 IF errnr=0 & lockcnt>0 THEN RETURN IF stilltoreply THEN CALL Reply(replymsg,10) CALL resetprefs CALL guiclean CALL remobjs EXIT errnr RETURN remobjs: IF objs>0 THEN DO IF wordmd THEN DO n=1 TO wnr-1 SelectObject wobj.n UnGroup END SelectObject DO n=1 TO objs SelectObject obj.n "MULTIPLE" END Group DeleteObject objs=0 END IF sobjs>0 THEN DO SelectObject IF wordmd THEN DO n=1 TO wnr-1 SelectObject wsobj.n UnGroup END DO n=1 TO sobjs SelectObject sobj.n "MULTIPLE" END Group DeleteObject sobjs=0 END RETURN resetprefs: IF deci~="" THEN DocItemPrefs "DECIMAL PERIOD" IF defprfs~="" THEN TextBlockPrefs defprfs IF defspecs~="" | defcolour~="" THEN TextBlockTypePrefs defspecs defcolour IF deffont~="" THEN TextBlockTypePrefs deffont IF deci~="" THEN DocItemPrefs "DECIMAL" deci RETURN loaddef: ARG where CALL loadtemp IF where>0 THEN DO ok=0 DO i=where TO 3-where BY 3-where*2 UNTIL ok IF preff.i~="" THEN DO ok=Open(prefs,preff.i,"R") IF ok THEN DO default=ReadCh(prefs,prefsize+6) CALL Close(prefs) END END END END ELSE default="" IF Length(default)~=prefsize+6 | Left(default,6)~=prefsid | C2D(SubStr(default,5,2))~=prefsize THEN default="" IF default="" THEN DO winx=defwinx winy=defwiny DO id=1 TO agads check.id=defchk.id cycle.id=defcyc.id val.id=defval.id END DO id=menuoff+1 TO menuoff+mchks check.id=defchk.id END DO id=agads+1 TO agads+sgads IF gtype.id=0 THEN val.id=1 ELSE val.id="" END END ELSE DO winx=C2D(SubStr(default,7,2)) winy=C2D(SubStr(default,9,2)) DO id=1 TO agads i=id*4 check.id=C2D(SubStr(default,i+7,1))~=0 cycle.id=Min(Max(C2D(SubStr(default,i+8,1)),0),Abs(labs.id)) val.id=Min(Max(C2D(SubStr(default,i+9,2)),0),9999) END DO id=menuoff+1 TO menuoff+mchks check.id=C2D(SubStr(default,id+agads*4-menuoff+10,1))~=0 END END CALL updategadgets RETURN savedef: ARG where CALL savetemp winx=GETVALUE(win,4,2,"N") winy=GETVALUE(win,6,2,"N") default=prefsid||D2C(winx,2)||D2C(winy,2) DO id=1 TO agads default=default||D2C(check.id,1)||D2C(cycle.id,1)||D2C(val.id,2) END DO id=menuoff+1 TO menuoff+mchks default=default||D2C(check.id,1) END DO i=1 TO where IF preff.i~="" THEN DO ok=Open(prefs,preff.i,"W") IF ok THEN DO CALL WriteCh(prefs,default) CALL Close(prefs) END END END RETURN loadtemp: IF tempsize=0 THEN RETURN ok=Open(prefs,temp,"R") IF ok THEN DO default=ReadCh(prefs,tempsize) i=1 IF Length(default)=tempsize THEN DO id=agads+1 TO agads+sgads val.id=replacepat(SubStr(default,i,len.id),D2C(0),"") i=i+len.id END CALL Close(prefs) END RETURN savetemp: IF tempsize=0 THEN RETURN ok=Open(prefs,temp,"W") IF ok THEN DO default="" DO id=agads+1 TO agads+sgads default=default||Left(val.id,len.id,D2C(0)) END CALL WriteCh(prefs,default) CALL Close(prefs) END RETURN updategadgets: IF ~cleangui THEN RETURN DO id=1 TO agads IF labs.id>=0 THEN CALL GT_SetGadgetAttrs(checkgad.id,win,Null(),GTCB_CHECKED,check.id) IF labs.id~=0 THEN CALL GT_SetGadgetAttrs(cyclegad.id,win,Null(),GTCY_ACTIVE,cycle.id) IF labs.id>0 THEN CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTIN_NUMBER,val.id) END DO id=agads+1 TO agads+sgads IF gtype.id>0 THEN CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTST_STRING,val.id) ELSE CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTIN_NUMBER,val.id) END CALL ClearMenuStrip(win) item=GETVALUE(menu,18,4,"P") DO n=menuoff+1 TO menuoff+mchks flags=C2D(B2C(BitAnd(C2B(D2C(GETVALUE(item,12,2,"N"),2)),"1111111011111111")))+CHECKED*check.n CALL SETVALUE(item,12,2,"N",flags,0) item=GETVALUE(item,0,4,"P") END CALL ResetMenuStrip(win,menu) RETURN newdoc: IF portok THEN DO Status "FILENAME" doc=RESULT WinToFront END ELSE doc="???" IF doc="" THEN doc=unnamed wintitle=replacepat(wtitle,"%f",doc) scrtitle=replacepat(stitle,"%f",doc) IF cleangui THEN DO CALL SetWindowTitles(win,wintitle,scrtitle) IF ~windowpos THEN CALL WindowToFront(win) CALL ActivateWindow(win) END RETURN SYNTAX: et=ErrorText(RC) ERROR: err=RC line=SIGL IF errtrap=-1 THEN CALL bye(err) IF errtrap=-2 THEN EXIT err IF err=errtrap THEN DO errtrap=0 i=resume DROP resume trapped=1 SIGNAL VALUE i END RESUME: errtrap=-1 IF et="" THEN et=fwerrtext.err CALL message(err,replacepat(replacepat(replacepat(replacepat(errtext,"%n",err),"%l",line),"%t",et),"%s",SourceLine(line))) CALL bye(err) RETURN BREAK_C: CALL bye(2) RETURN rembad: PROCEDURE PARSE ARG t bad=XRange("00"x,"1F"x)||XRange("7F"x,"A0"x) i=Verify(t,bad,"m") l=Length(t) DO WHILE i>0 t=Left(t,i-1) Right(t,l-i) i=Verify(t,bad,"m") END RETURN t replacepat: PROCEDURE PARSE ARG str,pat,replc p=Pos(pat,str) DO WHILE p>0 str=Left(str,p-1)||replc||SubStr(str,p+Length(pat)) p=Pos(pat,str) END RETURN str gettexttypespecs: PROCEDURE Status "FONTSIZE" p="SIZE" RESULT Status "FONTWIDTH" p=p "WIDTH" RESULT Status "FONTOBLIQUE" p=p "OBLIQUE" RESULT RETURN p radius: PROCEDURE ARG a,rx,ry,v rx=rx*Cos(a) ry=ry*Sin(a) r=v*Sqrt(rx*rx+ry*ry) RETURN r getshort: PROCEDURE ARG ptr,offset a=GETVALUE(D2C(ptr),offset,2,"N") IF a>32767 THEN a=a-65536 RETURN a xexists: PROCEDURE PARSE ARG file IF Pos(":",file)>0 THEN IF Pos(Upper(Left(file,Pos(":",file))),Upper(ShowList("A",,":")||ShowList("V",,":"))||":")>0 THEN ok=Exists(file) ELSE ok=0 ELSE ok=Exists(file) RETURN ok newchkitem: mchks=mchks+1 chk=mchks+agads+tgads+wgads+sgads PARSE ARG ltxt.chk,mkey.chk,defchk.chk,mnode.chk RETURN chk newitem: macts=macts+1 nr=macts+mchks+agads+tgads+wgads+sgads PARSE ARG ltxt.nr,mkey.nr,mnode.nr RETURN nr newgadget: agads=agads+1 PARSE ARG labs.agads,lkey.agads,defchk.agads,defval.agads,defcyc.agads,gnode.agads,lbound.agads,ubound.agads RETURN agads newstr: sgads=sgads+1 gad=sgads+agads PARSE ARG len.gad,lkey.gad,line.gad,val.gad,gtype.gad,gnode.gad check.gad=0 cycle.gad=0 labs.gad=1 slines=Max(slines,line.gad) RETURN gad newbutton: tgads=tgads+1 gad=tgads+agads+sgads PARSE ARG ltxt.gad,lkey.gad,lkey2.gad,gnode.gad RETURN gad newkey: wgads=wgads+1 gad=agads+tgads+wgads+sgads PARSE ARG lkey.gad,gnode.gad RETURN gad checksyntax: PARSE ARG par.1,par.2,par.3 ok=1 DO i=1 TO 3 WHILE par.i~="" IF par.i=Upper(par.i) THEN INTERPRET "ar.i="||ar.i ok=ok & Datatype(ar.i,par.i) END RETURN ok message: PARSE ARG xiterr,msgtxt,buttxt,titletxt IF msgtxt="" THEN RETURN 0 IF buttxt="" THEN buttxt=stdbut IF titletxt="" THEN titletxt=wintitle IF lib.reqtools THEN DO resume="BACKMSG" errtrap=14 button=RTEZRequest(replacepat(msgtxt,"|","0A"x),buttxt,titletxt) END BACKMSG: IF trapped THEN DO trapped=0 lib.reqtools=0 END IF ~lib.reqtools THEN IF lib.apig & cleangui & win~="00000000"x THEN button=EasyRequest(win,titletxt,replacepat(msgtxt,"|","0A"x),buttxt,Null(),0,0) ELSE SAY replacepat(msgtxt,"|","0A"x) IF xiterr>0 THEN CALL bye(xiterr) RETURN button